/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sismol.data;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.Query;
import sismol.cartography.Linha;
import sismol.cartography.Ponto;
import sismol.cartography.Trecho;
import sismol.cartography.TrechoAtual;

/**
 *
 * @author koji
 */
public class GerenciadorBusca {

    private EntityManager em = Persistence.createEntityManagerFactory("sismolPU").createEntityManager();

    public List<Linha> listarLinhas(){
        StringBuilder sb = new StringBuilder();
        sb.append("SELECT x FROM ").append(Linha.class.getSimpleName()).append(" x");

        List<Linha> list = this.em.createQuery(sb.toString()).getResultList();
        return list;
    }

    public List<Ponto> listarPontosPorLinha(Long linhaId) {
        Linha linha = this.em.find(Linha.class, linhaId);

        List<Trecho> trechos = linha.getTrechos();
        List<Ponto> pontos = new ArrayList<Ponto>();
        for (Trecho trecho : trechos) {
            pontos.add(trecho.getPontoA());
        }
        Ponto terminal = trechos.get(trechos.size()-1).getPontoB();
        pontos.add(terminal);

        return pontos;
    }
    
    public Collection<TrechoAtual> buscaPosicaoDosOnibusDaLinha(Long linhaId) {        
        StringBuilder sb = new StringBuilder();
        sb.append("SELECT x FROM ").append(TrechoAtual.class.getSimpleName()).append(" x WHERE x.onibus.linha.id = :linhaId");
        Query query = this.em.createQuery(sb.toString());
        query.setParameter("linhaId", linhaId);

        List<TrechoAtual> list = query.getResultList();
        for (TrechoAtual trechoAtual : list) {
            this.em.refresh(trechoAtual);
        }
        return list;
    }


}
